A cache is a memory bank that bridges main memory and a processing core, and is used to speed up data transfers and instruction execution. The cache is usually faster than main memory and allows instructions to be executed and data to be read and written at relatively higher speed. A suitable type of random access memory (RAM) (e.g., a static RAM or SRAM) may be used as a cache.
A second level cache may be shared among two or more processing cores and may include different classes of storage areas (referred to henceforth as cache resources) for storing different types of information that is related to data or instructions, e.g., tag memory, dirty memory, valid memory, data memory, error correcting code (ECC) memory, etc. A cache is usually also associated with one or more other elements (also referred to henceforth as cache resources) that are used, for example, for generating, checking, and/or correcting error correcting codes associated with data stored in the cache, e.g., ECC check module, ECC correcting module, ECC generation module, etc. A cache may handle many different types of cache commands (e.g., read access command, write access commands, snoop commands, etc.), which access the cache to read data from and/or write data to the cache.
Processing a cache command may require access to one or more of the cache resources. However, in a shared cache environment access to the one or more cache resources may be limited to a single processing core until a cache command has been resolved. For example, if a tag memory of a cache is being accessed by a first processing core for processing a first cache command, the tag memory may not be accessed by a different processing core (or by the same processing core) for processing a different cache command until resolution of the first cache command (or at least a part of the first cache command). This may be a limiting factor in achieving higher speed of a cache, particularly when the cache is shared by two or more processing cores.